package top.gangster.lunan.contractservice.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import top.gangster.lunan.contractservice.entity.Contract;
import top.gangster.lunan.contractservice.entity.ContractField;

/**
 * <p>
 * 合同的所有信息 服务类
 * </p>
 *
 * @author kid
 * @since 2021-11-11
 */
public interface ContractService extends IService<Contract> {

	/**
	 * 根据所属合同id查找出所有合同字段
	 * @param contractID 合同id
	 * @return 所有合同
	 */
	List<ContractField> getFieldsOfContractId(String contractID);

	/**
	 * 查询指定id合同
	 * @param contractId 合同id
	 * @return 指定id合同
	 */
	Contract getContract(String contractId);

	/**
	 * 根据合同名进行模糊分页查询
	 * @param current 当前页
	 * @param limit 页大小
	 * @param name 模糊匹配文件名
	 * @return 模糊分页查询结果
	 */
	Page<Contract> getContract(Long current,Long limit,String name);


	/**
	 * 根据合同类型id查询所有合同
	 * @param contractTypeId 合同类型id
	 * @return 该类型的所有合同
	 */
	List<Contract> getContractByTypeId(Integer contractTypeId);

	/**
	 * 分页查询该类型的合同
	 * @param contractTypeId 合同类型id
	 * @param current 当前页
	 * @param limit 页大小
	 * @return 分页查询结果
	 */
	Page<Contract> getContractByTypeId(Integer contractTypeId,Long current,Long limit);

	/**
	 * 根据合同状态id查询所有合同
	 * @param contractStateId 合同状态id
	 * @return 该状态的所有合同
	 */
	List<Contract> getContractByStateId(Integer contractStateId);

	/**
	 * 分页查询该状态的合同
	 * @param contractStateId 合同状态id
	 * @param current 当前页
	 * @param limit 页大小
	 * @return 分页查询结果
	 */
	Page<Contract> getContractByStateId(Integer contractStateId,Long current,Long limit);

	/**
	 * 指定某个合同模板id，将合同模板字段作为该模板的字段保存在数据库
	 * @param contractId 所属合同模板的id
	 * @param fields 合同模板字段
	 * @return is saved?
	 */
	boolean saveFields(String contractId, List<ContractField> fields);

	/**
	 * 根据合同文件id删除其所有合同字段
	 * @param id 合同文件id
	 * @return 是否成功删除
	 */
	boolean removeFieldsByContractId(String id);

	/**
	 * 根据合同文件id更新合同文件
	 * @param contract 合同文件
	 * @return is updated?
	 */
	boolean updateContract(Contract contract);
}
